<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // promise的终极调用方案：ES8出现的
    // async 以及 await ：改变了promise的调用形式，相当于通过同步来调用异步的代码
    // 依次调用3个promise
    function fn1 () {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          console.log("fn1执行了");
          resolve(111)
        }, 1000);
      })
    }
    function fn2 () {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          console.log("fn2执行了");
          resolve(222)
        }, 1000);
      })
    }
    function fn3 () {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          console.log("fn3执行了");
          // resolve(111)
          reject("失败了")
        }, 1000);
      })
    }

    // then链式调用 ES6
    // fn1().then(res => {
    //   console.log(res);
    //   return fn2();
    // }).then(res => {
    //   console.log(res);
    //   return fn3();
    // }).then(res => {
    //   console.log(res);
    // }).catch(err => {
    //   console.log(err);
    // })

    // async 和 await ：是then的一种语法糖，改写了promise的调用形式。
    async function myFn () { // 声明一个异步函数
      try {
        // 这个调用形式是依次执行
        let res1 = await fn1();
        console.log(res1);
        let res2 = await fn2();
        console.log(res2);
        let res3 = await fn3();
        console.log(res3);
      } catch (err) {
        console.log(err);
      }
    }
    myFn();
  </script>
</body>

</html>